Ambari-server开发自定义api
声明:博主写了一些Ambari系列文章,可以在历史文章中查看。
本文篇幅较长,但都是满满的干货。主要从Ambari-server详解、如何debug ambari-server源码、开发流程分析图、开发流程自定义示例四大部分入手,教读者如何玩转ambari-server
一、Ambari-server详解
1. 简介
Ambari-Server是一个WEB Server,提供统一的REST API接口,同时向web和agent开放了两个不同的端口(默认前者是8080, 后者是8440或者8441)。它是由Jetty Server容器构建,通过Spring Framework构建出来的WEB服务器,其中大量采用了google提供的Guice注解完成spring框架所需要的注入功能。 REST框架由JAX-RS标准来构建。
2. 目录
目录 | 描述 |
---|---|
org.apache.ambari.server.api.services | 对web接口的入口方法,处理/api/v1/* 的请求 |
org.apache.ambari.server.controller | 对Ambari中cluster的管理处理,如新增host,更service、删除component等 |
org.apache.ambari.server.controller.internal | 主要存放ResourceProvider和PropertyProvider; |
org.apache.ambari.service.orm.* | 对数据库的操作 |
org.apache.ambari.server.agent.rest | 处理与Agent的接口的入口方法 |
org.apache.ambari.security | 使用Spring Security来做权限管理 |
3. Resource
其中,每一种Resource都对应一个ResourceProvider,对应关系如下:
Resource.Type | ResourceProvider |
---|---|
Workflow | WorkflowResourceProvider |
Job | JobResourceProvider |
TaskAttempt | TaskAttemptResourceProvider |
View | ViewResourceProvider |
ViewInstance | ViewInstanceResourceProvider |
Blueprint | BlueprintResourceProvider |
Cluster | ClusterResourceProvider |
Service | ServiceResourceProvider |
Component | ComponentResourceProvider |
Host | HostResourceProvider |
HostComponent | HostComponentResourceProvider |
Configuration | ConfigurationResourceProvider |
Action | ActionResourceProvider |
Request | RequestResourceProvider |
Task | TaskResourceProvider |
User | UserResourceProvider |
Stack | StackResourceProvider |
StackVersion | StackVersionResourceProvider |
StackService | StackServiceResourceProvider |
StackServiceComponent | StackServiceComponentResourceProvider |
StackConfiguration | StackConfigurationResourceProvider |
OperatingSystem | OperatingSystemResourceProvider |
Repository | RepositoryResourceProvider |
RootService | RootServiceResourceProvider |
RootServiceComponent | RootServiceComponentResourceProvider |
RootServiceHostComponent | RootServiceHostComponentResourceProvider |
ConfigGroup | ConfigGroupResourceProvider |
RequestSchedule | RequestScheduleResourceProvider |
我们对数据的处理就是在xxxResourceProvider.java内实现。
4. 获取数据流程
(1) jersy接口接收到请求,创建一个ResourceInstance实例;
(2) 解析http请求构造一个Request对象,然后交给reques的process()方法来处理;
(3) reques解析url或http_body得到一个Predicate对象;
(4) 根据http类型获取handler,GET请求对应ReadHandler;
(5) handler向Query对象中添加分页、Render、Predicate等属性后,然后让query.execute();
(6) 根据Resource.Type获得对应的ResourceProvider对象,调用其getResources方法得到Set\
(7) 调用对应的PropertyProvider填充Resource;
(8) 处理结果,返回json结果;
二、Ambari-server Debug模式
1. 停止ambari-server服务
1 | ambari-server stop |
2. 以debug的方式来启动ambari-server
1 | java -server -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=5005 -XX:NewRatio=3 -XX:+UseConcMarkSweepGC -XX:-UseGCOverheadLimit -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -Dsun.zip.disableMemoryMapping=true -Xms1012m -Xmx3048m -XX:MaxPermSize=256m -Djava.security.auth.login.config=/etc/ambari-server/conf/krb5JAASLogin.conf -Djava.security.krb5.conf=/etc/krb5.conf -Djavax.security.auth.useSubjectCredsOnly=false -cp /etc/ambari-server/conf:/usr/lib/ambari-server/*:/usr/share/java/mysql-connector-java-5.1.45-bin.jar org.apache.ambari.server.controller.AmbariServer |
如图所示:
3. 在IDEA中连接Ambari-Server
ambari-server默认配置了服务端的debug参数,端口为5005。如果要修改端口,可以在/usr/sbin/ambari_server_main.py
文件中的对应位置修改,对应的ambari源码位置是ambari-server/src/main/python/ambari_server_main.py
,直接改5005端口即可。代码如下:
1 | SERVER_START_CMD_DEBUG = "{0} " \ |
在你要运行的代码上打上断点,比如,我要看http://172.16.0.142:8080/api/v1/users
,就在user的代码某流程处打上断点:
点击debug
按钮,在XShell内输入:curl -u admin:admin http://172.16.0.142:8080/api/v1/users
,
debug模式下,这几个按钮比较常用。从上往下,从左往右描述,分别为:一键断点处、断点概览、取消全部断点、平行执行、跳入执行、跳出执行等。
当一个流程走通时,如果要关闭debug模式,只需要Ctrl + c
终止debug进程即可。这样ambari-server也就停掉了。
三、开发流程分析
以 GET /api/v1/users 为例进行。该接口用于获取所有用户。
资源请求类,一通百通。
1. 省略若干内容
1 | ... |
9. REST API展示形式
1 | { |
四、如何联系我
如需获取清洗流程图以及后续详细干货内容,可添加好友:create17_ 详聊。
Ambari 二次开发知识库地址:https://www.yuque.com/create17/ambari
点关注,不迷路
好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是人才。
白嫖不好,创作不易。各位的支持和认可,就是我创作的最大动力,我们下篇文章见!
如果本篇博客有任何错误,请批评指教,不胜感激 !
原文作者: create17
原文链接: https://841809077.github.io/2018/07/10/Ambari/ambari server 二次开发/Ambari-server开发自定义api.html
版权声明: 转载请注明出处(码字不易,请保留作者署名及链接,谢谢配合!)